<style>
.test {
    margin: 0;
    padding: 10px;
    width: 300px;
    height: 60px;
    float: left;
}
</style>

<p>Tests 1-10 should have a tick at 80%. Tests 11 and 12 should have no ticks.</p>

<div class="test">
    <h4>Test 1: Changing option value</h4>
    <input type="range" list="list1" />
    <datalist id="list1">
        <option id="option1">20</option>
    </datalist>
    <script>
    function test1() {
        document.getElementById("option1").value = "80";
    };
    </script>
</div>

<div class="test">
    <h4>Test 2: Changing option attribute</h4>
    <input type="range" list="list2" />
    <datalist id="list2">
        <option id="option2">20</option>
    </datalist>
    <script>
    function test2() {
        document.getElementById("option2").setAttribute("value", "80");
    };
    </script>
</div>

<div class="test">
    <h4>Test 3: Changing option text content</h4>
    <input type="range" list="list3" />
    <datalist id="list3">
        <option id="option3">20</option>
    </datalist>
    <script>
    function test3() {
        document.getElementById("option3").textContent = "80";
    };
    </script>
</div>

<div class="test">
    <h4>Test 4: Set datalist</h4>
    <input type="range" id="input4" />
    <datalist id="list4">
        <option>80</option>
    </datalist>
    <script>
    function test4() {
        document.getElementById("input4").setAttribute("list", "list4");
    };
    </script>
</div>

<div class="test">
    <h4>Test 5: Set another datalist</h4>
    <input type="range" id="input5" list="list5-1" />
    <datalist id="list5-1">
        <option>20</option>
    </datalist>
    <datalist id="list5-2">
        <option>80</option>
    </datalist>
    <script>
    function test5() {
        document.getElementById("input5").setAttribute("list", "list5-2");
    };
    </script>
</div>

<div class="test">
    <h4>Test 6: Reassign datalist id</h4>
    <input type="range" list="list6-1" />
    <datalist id="list6-2">
        <option>80</option>
    </datalist>
    <script>
    function test6() {
        document.getElementById("list6-2").id = "list6-1";
    };
    </script>
</div>

<div class="test">
    <h4>Test 7: Reassign datalist in front</h4>
    <input type="range" list="list7-2" />
    <datalist id="list7-1">
        <option>80</option>
    </datalist>
    <datalist id="list7-2">
        <option>20</option>
    </datalist>
    <script>
    function test7() {
        document.getElementById("list7-1").id = "list7-2";
    };
    </script>
</div>

<div class="test">
    <h4>Test 8: Insert datalist in front</h4>
    <input type="range" list="list8-1" />
    <datalist id="list8-1">
        <option>20</option>
    </datalist>
    <script>
    function test8() {
        var e = document.createElement("datalist");
        e.innerHTML = "<option>80</option>";
        e.id = "list8-1";
        var f = document.getElementById("list8-1");
        f.parentNode.insertBefore(e, f);
    };
    </script>
</div>

<div class="test">
    <h4>Test 9: Insert option</h4>
    <input type="range" list="list9" />
    <datalist id="list9">
    </datalist>
    <script>
    function test9() {
        var e = document.createElement("option");
        e.value = "80";
        document.getElementById("list9").appendChild(e);
    };
    </script>
</div>

<div class="test">
    <h4>Test 10: Remove option</h4>
    <input type="range" list="list10" />
    <datalist id="list10">
        <option id="option10">20</option>
        <option>80</option>
    </datalist>
    <script>
    function test10() {
        var e = document.getElementById("option10");
        e.parentNode.removeChild(e);
    };
    </script>
</div>

<div class="test">
    <h4>Test 11: Insert non-datalist in front</h4>
    <input type="range" list="list11" />
    <datalist id="list11">
        <option>20</option>
    </datalist>
    <script>
    function test11() {
        var e = document.createElement("div");
        e.id = "list11";
        var f = document.getElementById("list11");
        f.parentNode.insertBefore(e, f);
    };
    </script>
</div>

<div class="test">
    <h4>Test 12: Remove datalist</h4>
    <input type="range" list="list12" />
    <datalist id="list12">
        <option>20</option>
    </datalist>
    <script>
    function test12() {
        var e = document.getElementById("list12");
        e.parentNode.removeChild(e);
    };
    </script>
</div>

<button id="button">Run tests.</button>

<script>
function clickOn(element)
{
    var x = element.offsetLeft + element.offsetWidth / 2;
    var y = element.offsetTop + element.offsetHeight / 2;
    eventSender.mouseMoveTo(x, y);
    eventSender.mouseDown();
    eventSender.mouseUp();
    eventSender.mouseMoveTo(0, 0);
}

var button = document.getElementById("button");
button.onclick = function() {
    test1();
    test2();
    test3();
    test4();
    test5();
    test6();
    test7();
    test8();
    test9();
    test10();
    test11();
    test12();
};
if (window.eventSender)
    clickOn(button);
</script>
